# -*- coding: utf-8 -*-
# @Time    : 2022/4/2 10:51
# @Author  : zyw
# @Email   : panda_kings@163.com
# @File    : __init__.py.py
from flask import Flask
from flask_cors import CORS
from apscheduler.schedulers.background import BackgroundScheduler # 使用的是任务执行完就结束
from apscheduler.executors.pool import ThreadPoolExecutor # 使用线程执行器, 因为线程的内存开销少, 执行速度快


from common.models import db
from project.resources.user import user_bp
from project.resources.channel import channel_bp
from project.resources.user_channel import user_channel_bp
from project.resources.news import news_bp
from project.resources.collect import collect_bp
from project.resources.comment import cmp_bp
from common.utils.middleware import jwt_authentication
# from common.utils.cron_tasks.user_info_expire import userCacheISExpire


def create_flask_app(config):
    app = Flask(__name__)
    app.app_context()
    # 配置文件
    app.config.from_object(config)
    # 添加钩子函数: 登录校验
    app.before_request(jwt_authentication)

    # 初始化整个项目的db
    db.init_app(app)

    # 注册蓝图
    app.register_blueprint(user_bp)
    app.register_blueprint(channel_bp)
    app.register_blueprint(user_channel_bp)
    app.register_blueprint(news_bp)
    app.register_blueprint(collect_bp)
    app.register_blueprint(cmp_bp)

    # 对所有的请求进行跨域
    cors = CORS(app,resources={r"/*/*": {"origins": "*"}})

    # 设置定时任务
    # 添加定时任务APScheduler
    executors = {
        'default': ThreadPoolExecutor(10) # 开启10个线程
    }
    app.scheduler = BackgroundScheduler(executors=executors)


    # 添加定时任务:fix_statistics
    # TDOD 定时任务的编写
    # corn 周期执行,3小时
    # 执行的任务: 判断用户信息是否过去, 过期就重新写入redis, mintues 没有这个参数
    # app.scheduler.add_job(userCacheISExpire, 'interval', hours=1, args=[app])
    # cron 每天凌晨1点执行
    # app.scheduler.add_job(userCacheISExpire, 'cron', hours=1, args=[app])
    # 立即执行
    # app.scheduler.add_job(userCacheISExpire, 'date', args=[app])
    # app.scheduler.start()# 执行定时任务


    return app



